Your own computer

By Rainer Blessing

I first got interested in computers by playing games on arcade machines placed at stores and from playing games on the Atari VCS 2600. Of course it was not possible, for me and most others, at that time to create games for the Atari and even if, it would be too complicated and expensive. So I started programming on a homecomputer with BASIC and never learnt Assembler. I tried it a few times and also managed to write programs for school, but it was never something usable. And now in the age of the PCs it really is usually a waste of time to use Assembler. It still is impressive to use Assembler, but it's just not the right tool. It's like painting a wall with a small paintbrush.

I was also impressed that Linus Torvalds wrote an Operating System by himself. When he started it was not the Linux we know now, it was a simple terminal application, which connected to his university computer {[1]}. But it still required an understanding of how his computer worked. He used no libraries, he controlled the machine.

Some people later also had the interest to learn how computers worked and created their own OS for PCs. This is also an admirable task because it requires a lot of work. But these OSs usually have no benefit apart from the gained knowledge by creating it. There are already a number of OSs for PCs and it will be really hard to write better ones from scratch.

It's the same with demos. PCs get more and more powerful, you can use sound and graphics libraries and then there is the operating system itself. There are a lot of layers between you and your machine which is very good for productivity. It is much easier to get anything done than before. This makes sound and graphics artists more important. Demos are now closer to prerendered animations and thus boring because they are not impressive anymore.

Because of this level of abstraction you might not know how everything works which is fine for a normal user or casual programmer, but "real" programmers want to know everything.

How to know everything

To start learning "everything" you have several options (sorted by learning value):

- You can use the PC and write your own libraries.

- You artificially restrain yourself, you can for example write programs which only use a certain amount of memory like 64k,4k or 256bytes.

- You can write programs for videogame systems or old homecomputers.

- Or you can build your own computer.

My article is about the last item in the list. If you built your own computer and wrote software for it, you can be pretty certain that you know how computers work. You know the software and the hardware. You also can impress others. There are not many who built their own computer.

You can tackle the task of building a computer from different levels (sorted by system performance/complexity):

1. You can theoretically design everything yourself, i.e. the CPU and everything else.
2. You can buy a kit and assemble everything.
3. You can buy an assembled board with simple components
4. You can buy an assembled board with complex components like an FPGA.

I would start with the option of assembling a kit. Then you don't have many components and you can change some components yourself to really make it "your" computer, but I choose option three, because at the time I bought it I only knew one offer which included all the necessary parts and information in one package [2].

All these options still require a great learning effort if your are just a software guy. You have to gather information on the internet or from books which also takes time.

About two years ago I discovered the website www.xgamestation.com. On the site the company Nurve Networks announced it would offer a do it yourself videogame system targeted at game/demo programmers.

The most important thing was that it was accompanied by a book which should explain everything about the system: how it works and how it can be programmed. It also contains the foundation to building your own computer i.e. it starts with electrical engineering stuff like the flow of electrons and moves on to explain all kinds of components of a computer.

I already owned two game programming books from the same author and I looked forward for the system to become available.

The XGameStation - Micro Edition (abbreviated XGS) was first sold in August last year. I ordered mine in September and had to wait four month until I got it. At that time they were produced in batches, but now they are available immediately although shipping it to Europe also takes some time.

Hardware

The XGS contains simple, but still powerful components. It has an 8bit CPU which runs at 80MHz which yields 80MIPS. There is also a second CPU, which you can use as a coprocessor. It has simple 3 channel sound. The sound chip, which is mainly used in mobile phones, can play sine and square waves but there are not many possibilities to modify the output so it's no SID. The video section also could be disappointing to lazy programmers. You don't have a convenient framebuffer where you can plot your pixels. The graphics programming works like on the Atari VCS 2600 (or the Sinclair SX81). You can only modify the colour the electron beam produces on the monitor/TV. People already complained about this, but it is a consistent design decision. It keeps the components simple and offers the greatest level of control. It has about the same resolutions as a C64.

It has several interfaces: two Atari joystick ports, composite video and mono sound outputs, there is a PS/2 keyboard input and all ports of the CPU can be accessed with an expansion slot or direct at the CPU.

Development

The XGS comes with an IDE for MS Windows. You can use it to program the XGS over the parallel port (cable is included).

But it is better to buy a SX-Key, a device which connects to the XGS over the serial interface. You can only use the IDE from the manufacturer of the CPU to run the programs in debugging mode. The debugging functionality is proprietary.

The SX-Key IDE unfortunately only runs on MS Windows. You can also program the XGS from Linux, but you won't be able to use the debugger.

You can program the XGS in BASIC, C or Assembler. The XGS kit contains an ebook version of "Programming the SX Microcontroller" which explains a lot of the assembler language elements. The XGS CD also contains a lot of code samples which are explained in the XGS ebooks. The ebooks on the CD have a great information value as you can see. You don't have to look anywhere else for a while (apart from maybe a dictionary).






Software

There unfortunately isn't much software for the XGS. This could have several reasons: It is more a tool to learn about hardware. It takes time to learn to program the device in Assembler (I have an excuse. I had to program the Linux IDE first :) ).

I haven't seen any programs created by regular users. The website only has demos and games created for the launch of the XGS. The demos contain some known demo effects like: rotozoom, flag, floormap, burning cube, 2d starfield and a raycaster.

The games are all copies of existing games like Pac Man, Tetris, Pong and Breakout.

I would like to see more demos on the XGS. If you want to become a real coder get a XGS and create one :)

[1] L.Torvalds - "Just For Fun", Chapter IV.
[2] A kit called XGS Pico Edition will be released soon by Nurve Networks

Rainer Blessing